package com.example.common.utils.jwt;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

/**
 * @Author zwp14
 * @create 2024/6/11 20:22
 * @description JWT工具，登录成功之后后端产生JWT令牌并且把他交给前端浏览器
 * 每次浏览器进行访问操作携带令牌后端过滤器或者拦截器即可放行
 */
public class JwtUtils {

    /**
     * 密钥签名
     */
    private static final String SIGN_KEY = "itheima";

    /**
     * 生成JWT令牌
     * @param claims JWT第二部分负载 payload 中存储的内容
     * @return
     */
    public static String generateJwt(Map<String, Object> claims){
        //有效时间-12H
        long expire = 43200000L;
        return Jwts.builder()
                //自定义信息（有效载荷）
                .addClaims(claims)
                //签名算法（头部）
                .signWith(SignatureAlgorithm.HS256, SIGN_KEY)
                //过期时间
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .compact();
    }

    /**
     * 解析JWT令牌
     * @param jwt JWT令牌
     * @return JWT第二部分负载 payload 中存储的内容
     */
    public static Claims parseJWT(String jwt){
        return Jwts.parser()
                //指定签名密钥
                .setSigningKey(SIGN_KEY)
                //指定令牌Token
                .parseClaimsJws(jwt)
                .getBody();
    }
}
